Micron Document
Livres et Wikis | Archives | Info


JavaScript Object Notation
layout: Wide · Narrow · Centered
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
JavaScript Object Notation (JSON) est un format de données textuel
dérivé de la notation des objets du langage JavaScript. Il concurrence
XML pour la représentation et la transmission d’information
structuréecite-ref-1[1].

Imaginé par Douglas Crockford, le format JSON a été introduit pour la
première fois sur la page json.org en 2001cite-ref-1-2-0[2]. Cette démarche a conduit
à sa standardisation ultérieure sous la norme ECMA-404cite-ref-1-2-1[2]
d'Ecma International, publiée en octobre 2003cite-ref-1-2-2[2]. Il est également
décrit en 2017 par la RFC 8259cite-ref-3[3] de l’Internet Engineering Task Force
qui se veut compatible avec ECMA-404 et ECMA-404.

Des bibliothèques pour le format JSON existent dans de nombreux

Contents

• Exemple
• Commentaires
• Usages
• JSONP
• JSON5
• HJSON
• Annexes

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Caractéristiques

Un texte en JSON comprendcite-ref-5[5]cite-ref-0-4-1[4] :

• deux types composés :

• des objets JavaScript, ou ensembles de paires « nom » (ou « clé ») /
« valeur »,
• des listes ordonnées de valeurs (tableau) ;

• quatre types scalaires :

• des booléens : prend la valeur true ou false,
• des nombres : un nombre décimal signé qui peut contenir une part
fractionnable ou élevée à la puissance. Le JSON n'admet pas les
nombres inexistants (NaN), et ne distingue pas les entiers et les
• des chaînes de caractères : une séquence de 0 ou plus caractères
Unicode. À l'instar des clés, elles sont obligatoirement entourées de
guillemets,
• la valeur null : qualifie l'absence de valeur.

Chacun de ces types peut être utilisé pour constituer un document.

Exemple

Exemple de texte au format JSON :

{
"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{ "value": "New", "onclick": "CreateNewDoc()" },
{ "value": "Open", "onclick": "OpenDoc()" },
{ "value": "Close", "onclick": "CloseDoc()" }
]
}
}
}

Équivalent au format XML :

<menu id="file" value="File">
<popup>
<menuitem value="New" onclick="CreateNewDoc()"/>
<menuitem value="Open" onclick="OpenDoc()"/>
<menuitem value="Close" onclick="CloseDoc()"/>
</popup>
</menu>

Équivalent au format YAML :

menu:
id: file
value: File
popup:
menuitem:
- value: New
onclick: CreateNewDoc()
- value: Open
onclick: OpenDoc()
- value: Close
onclick: CloseDoc()

Commentaires

JSON est un format d'échange de données dont la RFC n'admet pas les
commentaires, qui sont par nature des métadonnées. Un
analyseur syntaxique JSON strict détecte une erreur s'il rencontre un
caractère non prévu par la spécification.

Il existe des initiatives de formats étendant JSON pour ajouter des
commentaires (comme Hjsoncite-ref-6[6] pour Human JSON en anglais) et des
logiciels permettant de restituer, à partir de ces formats dérivés, du
JSON standard. Toutefois, ces fichiers, demandant alors une étape
supplémentaire avant de pouvoir être lus par un interpréteur JSON
standard, perdent légèrement en facilité d'interopérabilité.

On peut toujours ajouter une propriété à un champ dans un tableau
associatif JSON, la nommer "_comment" (un usage qui se développe[Quand
?][réf. nécessaire]), et mettre un texte (le commentaire) dans le champ
valeur :

{
"_comment": "Imported from Wikidata 2015-05-27 10:13.",
"QID": "Q5502001",
"label": "Adèle",
"description": "late 18th century, early 19th century French brig"
}

Durant la mise au point du format, Douglas Crockford constate que
certains des premiers utilisateurs du JSON ajoutent des commentaires
dans le but de donner des directives au parseurcite-ref-crockford-2012-7-0[7], Ă  l'image des
instructions #ifdef ou #define du préprocesseur C. Il y voit un danger
pour l'interopérabilité, une priorité du format, et décide de les
retirercite-ref-crockford-2012-7-1[7]. En 2012, il s'explique sur ce choix et reconnait ĂŞtre
conscient de la tristesse des utilisateurs de ne pouvoir commenter ces
fichierscite-ref-crockford-2012-7-2[7].

Usages

Bien qu’utilisant une notation JavaScript, JSON est indépendant du
langage de programmation (plusieurs dizaines de langages de
programmation ont intégré JSON). JSON sert à faire communiquer des
applications dans un environnement hétérogène. Il est notamment utilisé
comme langage de transport de données par AJAX et les services Web.
D’autres solutions sont possibles comme XML. Le type MIME
application/json est utilisé pour le transmettre par le protocole HTTP.

Un document JSON représente un tableau associatif, implémenté en
JavaScript par la classe Object, d’où le nom de ce premier. Il est donc
potentiellement plus facile à interpréter qu’un XML qui imposera le
recours à des techniques souvent plus lourdes qu’un accès direct, telles
que le parcours hiérarchique de l’arbre DOM représenté par le document
entier.

Il peut aussi être utilisé pour :

• la sérialisation et dé-sérialisation de tableaux associatifs ;
• l’encodage de documents ;
• l'encodage de données structurées ;

La syntaxe utilisée par les modules disponibles dans différents langages
de programmation peut varier. Par exemple, avec le module json de la
bibliothèque standard de Python, il faudra adapter la syntaxe du langage
Python qui diffère de celle utilisée par le format JSON :

• Pour les chaînes de caractères, seuls les guillemets doubles sont
acceptés.
• Les booléens s'écrivent tout en minuscule (true et false).
• L'objet None est représenté par null

Évaluation

En JavaScript, il est simple d’évaluer une expression JSON pour la
transformer en Object natif :

var donnees = eval('('+donnees_json+')');

Cette méthode comporte toutefois des risques car la chaîne de caractères
donnees_json peut contenir n’importe quel code JavaScript. Il existe une
méthode plus sûre qui consiste à analyser la syntaxe de la chaîne de
caractères donnees_json, seule solution disponible dans les autres
langages de programmation, à l’exception de Python, la syntaxe de JSON
correspondant Ă  ses deux types principaux : les listes et les
dictionnaires.

À partir de 2009, les navigateurs commencent à intégrer un support natif
du format JSON. Cela facilite sa manipulation, la sécurité (contre
l’évaluation de scripts malveillants inclus dans une chaîne JSON), et la
rapidité de traitement. Ainsi les navigateurs Firefox 3.5, IE 8 ou
encore Opera 10.5 l’intègrent en natifcite-ref-8[8].

Évaluer en JavaScript une expression JSON pour la transformer en Object
se fait alors de la manière suivante :

var donnees = JSON.parse(donnees_json);

Différentes bibliothèques javascript permettent de supporter des
navigateurs plus anciens avec une syntaxe similaire.

Extensions du format

JSONP

JSONP ou JSON-P (pour JSON with padding, en français, « JSON avec
formatage ») est une extension dans laquelle le nom de la fonction de
retour est indiquécite-ref-9[9]. L’idée originale proviendrait du blog de Bob
Ippolito en 2005cite-ref-10[10] et est maintenant répandue dans les applications
Web 2.0, telle que Google’s toolkit Applicationscite-ref-11[11]. Des améliorations
sont prévues pour y ajouter des argumentscite-ref-12[12].

JSONP utilise des balises de scripts, les appels sont ouverts. Ainsi,
JSONP peut être inapproprié pour transporter des informations
confidentielles.

JSON5

JSON5 est une extension de la syntaxe du JSON, destiné à contourner les
limitations de ce dernier.

Spécifications

• Les noms des champs ne sont plus entre guillemets
• Support des commentaires (sur une ou plusieurs lignes)
• Les nombres peuvent être représentés au format hexadécimal, être
précédés du signe positif (+), avoir pour valeur Infinity ou NaN
• Espaces blancs supplémentaires autorisés
• Les chaînes de caractères peuvent être contenus entre apostrophes

HJSON

HJSON est une extension de la syntaxe JSON, ayant le mĂŞme objectif que
JSON5 (voir ci-dessus).

Spécifications

• Les champs peuvent être séparés par un retour à la ligne au lieu d'une
virgule
• Possibilité d'écrire des commentaires (#, //, /* ... */)
• L'utilisation des guillemets pour encapsuler une chaîne de caractères
n'est pas obligatoire
• Les chaînes de caractères peuvent être écrites sur plusieurs lignes

Annexes

Articles connexes

• BSON (Binary JSON) : un format étendant les possibilités du JSON
(données temporelles, binaires, etc.), notamment utilisé par MongoDB ;
• TopoJSON : un format de stockage des données topologiques ;
• GeoJSON : un format de stockage des données géographiques ;
• YAML : un autre langage de sérialisation de données.
• JSON-LD : (pour JavaScript Object Notation for Link Data) est un
standard du W3C pour structurer des données sur le web en utilisant du
JSONcite-ref-13[13]cite-ref-14[14].

Liens externes

• (en) JSON5
• (en) HJSON

Références

cite-note-11. ↑ « Structuration des donnees: XML et JSON », sur wdi.supelec.fr (consulté le 4 février 2023)
cite-note-1-22. international2017ecma-international2017ECMA International, Standard ECMA-404 : The JSON Data Interchange Syntax, 114 Rue du Rhône, CH-1204 Geneva, ECMA International, décembre 2017, 2e éd., 16 p. (lire en ligne), p. 1, 5
cite-note-33. ↑ 2017(en) « RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format », IETF Datatracker,‎ 13 décembre 2017 (lire en ligne, consulté le 4 février 2023)
cite-note-0-44. « JSON », sur www.json.org (consulté le 4 février 2023)
cite-note-55. ↑ crozatjerphanioncarrel-billiarduzanst-phane-crozatjulien-jerphanionharold-carrel-billiardmaxime-uzanStéphane Crozat, Julien Jerphanion, Harold Carrel-Billiard, Maxime Uzan et Cécile Fecherolle, « JavaScript Object Notation [Introduction aux bases de données NoSQL] », sur librecours.net (consulté le 4 février 2023)
cite-note-66. ↑ (en) « Hjson, a user interface for JSON », sur hjson.github.io (consulté le 5 février 2020)
cite-note-crockford-2012-77. crockford2012douglas-crockford2012Douglas Crockford, « Comments in JSON »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?), sur Publications du compte Google+ de Douglas Crockford, 1er mai 2012 (consulté le 27 mai 2015)
cite-note-88. ↑ (en) « Can I use... JSON parsing », sur caniuse.com (consulté le 5 février 2020)
cite-note-99. ↑ « Une requête inter-domaine à l'aide de JSONP », sur www.journaldunet.com (consulté le 5 février 2020)
cite-note-1010. ↑ 2005(en) « Remote JSON - JSONP », 5 décembre 2005.
cite-note-1111. ↑ (en) « GWT Tutorial: How to Read Web Services Client-Side with JSONP ».
cite-note-1212. ↑ 2008(en) « JSONPP », 11 juin 2008.
cite-note-1313. ↑ w3c2020(en) W3C, « The JSON-LD Vocabulary », 3 janvier 2020
cite-note-1414. ↑ (en) « Home - schema.org », sur schema.org (consulté le 5 février 2020)

• Portail de l’informatique
• Portail de la programmation informatique